package com.zhenai.jmeter;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class GenericInvokeUtils {

    public static Object[] convertInternalClass(Object[] parameters) {
        if (parameters == null || parameters.length == 0) {
            return parameters;
        }
        Object[] result = new Object[parameters.length];
        try {
            for (int i = 0; i < parameters.length; i++) {
                result[i] = convertTypeObj(parameters[i]);
            }
        } catch (Throwable t) {
            return parameters;
        }
        return result;
    }

    /**
     * 若 parameter 中的 class 节点存在 Abc.Def 形式表示的内部类，则转化成 Abc$Def 表示的形式。
     *
     * @param parameters
     * @return
     */
    private static Object convertTypeObj(Object parameter) {
        if (parameter instanceof Map) {
            Map param = (Map) parameter;
            if (param.get("class") != null) {
                ((Map) parameter).put("class", MethodSignatureUtils.convertInternalClassStr((String)param.get("class")));
            }
            for (Object key : param.keySet()) {
                ((Map) parameter).put(key, convertTypeObj(param.get(key)));
            }
            return parameter;
        }
        if (parameter instanceof List) {
            List<Object> result = new ArrayList<Object>();
            for (Object item : (List) parameter) {
                result.add(convertTypeObj(item));
            }
            return result;
        }
        return parameter;
    }
}
